package com.run_java_test.jar_local_run.service;

import java.io.File;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

// jar 工具
public class JarUtils {

    // 通过 jar 文件路径获取 jar 中 class的名称的集合
    public static Set<String> getClassNamesFromJar(File jarFile) throws Exception {
        // 将class名称放在set中
        Set<String> classNames = new HashSet<>();
        // 这种try写法可以自动调用 close 方法
        try (JarFile jar = new JarFile(jarFile)) {
            // 获取 JAR 文件条目
            Enumeration<JarEntry> entries = jar.entries();
            // 如果jar中有文件
            while (entries.hasMoreElements()) {
                // 获取jar中文件
                JarEntry entry = entries.nextElement();
                // 如果文件是class文件
                if (entry.getName().endsWith(".class") && !entry.isDirectory()) {
                    String className = entry.getName()
                            .replace("/", ".")
                            .substring(0, entry.getName().length() - 6);
                    // 返回class文件
                    classNames.add(className);
                }
            }

            // close 默认被调用了
            jar.close();
        }
        // 返回名称集合
        return classNames;
    }

}
